Phương pháp kiểm thử Kiểm_thử_phần_mềm

Kiểm thử tĩnh và động

Có rất nhiều phương pháp để kiểm thử phần mềm. Đánh giá, định hướng hoặc kiểm tra được gọi là kiểm thử tĩnh, trong khi việc chạy mã lập trình thực tế trong các tình huống được gọi là kiểm thử động. Kiểm thử tĩnh thông thường có thể được bỏ qua khi thực hành nhưng kiểm thử động diễn ra khi bản thân chương trình đó đang được sử dụng. Kiểm thử động có thể bắt đầu trước khi chương trình đã hoàn tất 100% để kiểm thử các phần cụ thể của mã và được áp dụng cho các chức năng riêng biệt hoặc Module. Kỹ thuật điển hình cho điều này được sử dụng trong cả mạch nhánh/trình điều khiển hoặc được thực hiện trong một môi trường gỡ lỗi nhất định.

Kiểm thử tĩnh liên quan đến việc kiểm chứng trong khi kiểm thử động liên quan đến việc xác nhận. Nó đều cùng giúp cải thiện chất lượng phần mềm.

Phương pháp thăm dò

Theo truyền thống thì các phương pháp kiểm thử phần mềm được bắt nguồn từ kiểm thử hộp trắng và hộp đen. Có hai cách tiếp cận được sử dụng để mô tả quan điểm của một kỹ sư kiểm thử khi thiết kế các Test Case.

Kiểm thử hộp trắng

Kiểm thử hộp trắng (được biết đến như là kiểm thử tính rõ ràng của hộp, kiểm thử hộp kính, kiểm thử hộp trong suốt và kiểm thử cấu trúc) giúp kiểm thử được cấu trúc nội bộ hoặc hoạt động của một chương trình, như tương phản với chức năng được bộc lộ của người dùng cuối. Một góc nhìn nội bộ của hệ thống trong kiểm thử hộp trắng giống như là các kỹ năng lập trình được sử dụng để thiết kế ra các tình huống kiểm thử. Các Tester lựa chọn yếu tố đầu vào để thực hiện đường dẫn thông qua các mã và xác định được kết quả đầu ra thích hợp. Điều này tương tự các nút kiểm thử trong một mạch, ví dụ như kiểm thử thông mạch (ICT).

Trong khi kiểm thử hộp trắng có thể được áp dụng tại đơn vị, tích hợp hệ thống và các cấp độ của quá trình kiểm thử phần mềm, nó thường được thực hiện ở cấp đơn vị. Nó có thể kiểm thử đường dẫn trong một đơn vị, liên kết giữa các đơn vị trong quá trình tích hợp, và giữa các hệ thống con trong một kiểm thử hệ thống cấp. Mặc dù phương pháp này thiết kế kiểm thử có thể phát hiện ra nhiều lỗi hoặc các vấn đề, nó có thể không phát hiện các phần chưa thực hiện của các đặc điểm kỹ thuật hoặc yêu cầu thiếu sót.

Các kỹ thuật được sử dụng trong kiểm thử hộp trắng bao gồm:

  • Kiểm thử API (giao diện lập trình ứng dụng) - kiểm thử ứng dụng có sử dụng các API công cộng và cá nhân.
  • Kiểm thử độ bao phủ mã - tạo ra các bài kiểm thử để đáp ứng một số tiêu chí của bảo hiểm mã (ví dụ, các nhà thiết kế kiểm thử có thể tạo ra các bài kiểm thử để làm tất cả các câu lệnh trong chương trình được thực hiện ít nhất một lần).
  • Phương pháp chèn lỗi - cố tình đưa ra những lỗi lầm để đánh giá hiệu quả của các chiến lược kiểm thử.
  • Phương pháp kiểm thử đột biến.
  • Phương pháp thử tĩnh.

Các công cụ bao phủ mã có thể đánh giá đầy đủ của một bộ kiểm thử đã được tạo ra bằng phương pháp bất kỳ nào đó, bao gồm cả kiểm thử hộp đen. Điều này cho phép nhóm nghiên cứu phần mềm kiểm thử các bộ phận của một hệ thống mà hiếm khi được kiểm thử và đảm bảo rằng các điểm chức năng quan trọng nhất đã được kiểm thử.[21] Bao phủ mã giống như một phần mềm metric có thể báo cáo tỷ lệ phần trăm cho:

  • Bao phủ chức năng: dựa vào các báo cáo của chức năng này thực hiện.
  • Bao phủ câu lệnh: dựa vào các báo cáo về số lượng các dòng được thực hiện để hoàn thành kiểm thử.

100% bao phủ câu lệnh đảm bảo rằng tất cả các đường dẫn mã, hoặc các nhánh (trong điều kiện của luồng điều khiển) được thực hiện ít nhất một lần. Điều này hữu ích trong việc đảm bảo đúng chức năng nhưng không đủ kể từ khi các mã tương tự có thể thực hiện tiến trình xử lý dữ liệu đầu vào khác nhau dù đúng hoặc không.

Kiểm thử hộp đen

Bài chi tiết: Kiểm thử hộp đen
Sơ đồ hộp đen

Kiểm thử hộp đen coi phần mềm như là một "hộp đen", kiểm thử chức năng mà không cần bất kỳ kiến thức về cấu trúc và hành vi bên trong phần mềm. Các Tester chỉ biết về những gì phần mềm phải làm mà không biết là nó làm như thế nào.[22] Phương pháp kiểm thử hộp đen bao gồm: Phân vùng tương đương, phân tích giá trị biên, tất cả các cặp kiểm thử, bảng chuyển đổi trạng thái, kiểm thử bảng quyết định, kiểm thử chéo, kiểm thử dựa trên mô hình, sử dụng Test Case, thăm dò kiểm thử và kiểm thử dựa trên đặc điểm kỹ thuật.

Kiểm thử dựa trên đặc điểm kỹ thuật nhằm mục đích để kiểm tra các chức năng của phần mềm theo các yêu cầu ứng dụng.[23] Mức độ kiểm thử thường đòi hỏi Test Case kỹ lưỡng để được cung cấp bởi các Tester, những người mà sau đó có thể xác minh một cách đơn giản rằng đối với một giá trị đầu vào hoặc đầu ra (hoặc cách xử lý) có thể giống hoặc không so với giá trị kỳ vọng được định vị trong một Test Case nhất định. Các Test Case được xây dựng quanh các thông số kỹ thuật và các yêu cầu đề xuất, tức là những tất cả những gì ứng dụng đó phải làm. Nó được sử dụng để mô tả mở rộng phần mềm bao gồm các thông số kỹ thuật, các yêu cầu và thiết kế được bắt nguồn trong Test Case. Các kiểm thử này có thể là chức năng hoặc phi chức năng.

Kiểm thử dựa trên đặc điểm kỹ thuật có thể là cần thiết để đảm bảo chức năng chính xác, nhưng nó không đủ để bảo vệ chống lại các tình huống phức tạp hoặc có độ rủi ro cao.[24]

Một lợi thế của kỹ thuật kiểm thử hộp đen là không yêu cầu nhất thiết phải có kiến thức lập trình. Các Tester tiến hành kiểm thử ở các khu vực và các chức năng khác nhau của phần mềm mà không liên quan đến các lập trình viên. Mặt khác, kiểm thử hộp đen được cho là "đi bộ trong một mê cung tối tăm mà không có đèn pin".[25] Bởi vì họ không kiểm thử mã nguồn và đã có nhiều tình huống các Tester chỉ kiểm thử được tính năng trong một vài trường hợp chứ không kiểm thử được toàn bộ hoạt động của chương trình.

Phương pháp kiểm thử này có thể được áp dụng cho tất cả các cấp kiểm thử phần mềm: đơn vị, tích hợp, hệ thống và chấp nhận. Nó không thể thực hiện được tất cả các kiểm thử các cấp độ cao hơn nhưng nó có thể tạo ưu thế tốt khi kiểm thử từng đơn vị.

Kiểm thử trực quan

Mục đích của kiểm thử trực quan là cung cấp các nhà phát triển khả năng kiểm soát những gì đang xảy ra tại thời điểm phần mềm thất bại theo cách mà họ có thể nhìn thấy thông tin được yêu cầu rõ ràng và dễ hiểu nhất.[26][27]

Cốt lõi của kiểm thử trực quan là ý tưởng giúp ai đó nhận ra được một vấn đề (hoặc một kiểm thử thất bại) thay vì chỉ mô tả nó từ đó giúp cho sự rõ ràng và hiểu biết tăng lên đáng kể. Kiểm thử trực quan vì thế luôn yêu cầu phải ghi lại toàn bộ tiến trình kiểm thử – chụp lại tất cả mọi thứ xảy ra trên hệ thống ở định dạng video. Các video đầu ra được bổ sung bằng thời gian kiểm thử thực tế đầu vào thông qua hình ảnh từ webcam và âm thanh từ micro.

Kiểm thử trực quan cung cấp một số lợi thế như: Chất lượng của giao tiếp được tăng lên đáng kể bởi các Tester có thể giúp cho nhà phát triển nhìn rõ được vấn đề xảy ra (và các sự kiện dẫn đến nó) chứ không phải chỉ mô tả chung chung nó và cần phải sửa chữa các lỗi này để nó không còn tồn tại trong nhiều trường hợp khác nữa. Các nhà phát triển sẽ có tất cả các bằng chứng được yêu cầu trong bài kiểm thử lỗi và có thể tập trung vào các nguyên nhân gây ra lỗi cũng như làm thế nào để cố định được nó.

Kiểm thử trực quan đặc biệt rất phù hợp cho các môi trường mà triển khai theo phương pháp AGILE trong phát triển phần mềm đòi hỏi việc giao tiếp tốt hơn giữa các Tester và các nhà phát triển cũng như sự cộng tác giữa các nhóm nhỏ với nhau.[cần dẫn nguồn]

Kiểm thử Ad hoc và kiểm thử thăm dò là những phương pháp quan trọng để kiểm thử tình trạng nguyên vẹn của phần mềm bởi chúng đòi hỏi chuẩn bị thời gian để thực thi ít hơn trong khi các lỗi quan trọng phải được tìm thấy một cách nhanh chóng. Trong kiểm thử Ad hoc thì địa điểm kiểm thử là một vị trí không định trước và với khả năng của một công cụ kiểm thử trực quan giúp ghi lại tất cả những gì xảy ra trên một hệ thống đều trở nên rất quan trọng.[cần giải thích][cần dẫn nguồn]

Kiểm thử trực quan là tập trung nhận diện kiểm thử sự chấp nhận của khách hàng và tính khả dụng của phần mềm bởi vì kiểm thử này có thể do nhiều cá nhân liên quan sử dụng trong quá trình phát triển.[cần dẫn nguồn] Đối với khách hàng, nó trở nên dễ dàng để cung cấp các báo cáo lỗi chi tiết và thông tin phản hồi còn đối với người sử dụng chương trình thì kiểm thử trực quan có thể ghi lại hành động của người dùng trên màn hình như tiếng nói và hình ảnh của họ để cung cấp một bức tranh hoàn chỉnh tại thời điểm phần mềm thất bại cho các nhà phát triển.

Kiểm thử hộp xám

Kiểm thử hộp xám liên quan đến hiểu biết về cấu trúc dữ liệu bên trong và các thuật toán cho mục đích của các bài kiểm thử thiết kế. Khi thực hiện những bài kiểm thử với User hoặc mức độ hộp đen, Tester không nhất thiết phải truy cập vào mã nguồn của phần mềm.[28] Ta có thể thao tác với dữ liệu đầu vào và định dạng đầu ra không xác định như hộp xám bởi vì đầu vào và đầu ra rõ ràng ở bên ngoài của "hộp đen" mà chúng được hệ thống gọi ra trong quá trình kiểm thử. Sự phân biệt này là đặc biệt quan trọng khi tiến hành kiểm thử tích hợp giữa hai Module được viết mã bởi hai nhà phát triển khác nhau, mà ở đó chỉ có các giao diện được bộc lộ ra để kiểm thử.

Tuy nhiên, các kiểm thử mà yêu cầu thay thế một kho lưu trữ dữ liệu back-end như một cơ sở dữ liệu hoặc một tập tin đăng nhập không xác định như hộp xám, người dùng sẽ không thể thay đổi các kho lưu trữ dữ liệu trong khi sản phẩm vẫn đang hoạt động bình thường.

Kiểm thử hộp xám cũng có thể bao gồm kỹ thuật đảo ngược để xác định đối tượng, giá trị biên hoặc các thông báo lỗi.

Khi biết được những khái niệm cơ bản về cách thức các phần mềm hoạt động như thế nào, Tester thực hiện kiểm thử phần mềm từ bên trong tốt hơn so với bên ngoài. thường, một Tester hộp xám sẽ được phép thiết lập một môi trường kiểm thử bị cô lập với các hoạt động như gieo một cơ sở dữ liệu. Các kiểm thử có thể quan sát trạng thái của sản phẩm được kiểm thử sau khi thực hiện hành động nhất định giống như việc thực hiện các câu lệnh SQL đối với cơ sở dữ liệu và sau đó thực hiện truy vấn để đảm bảo rằng những thay đổi dự kiến đã được phản ánh. Kiểm thử hộp xám thực hiện kịch bản kiểm thử thông minh, dựa trên thông tin hạn chế. Điều này sẽ đặc biệt áp dụng cho các kiểu xử lý dữ liệu, kể cả xử lý ngoại lệ, và cứ thế.[29]

Tài liệu tham khảo

WikiPedia: Kiểm_thử_phần_mềm http://se.inf.ethz.ch/people/leitner/publications/... http://www.abeacha.com/NIST_press_release_bugs_cos... http://www.bullseye.com/coverage.html#intro http://www.crosschecknet.com/soa_testing_black_whi... http://books.google.com/?id=7RoIAAAAIAAJ http://www.kaner.com/pdfs/ETatQAI.pdf http://www.satisfice.com/articles/requirements_bas... http://www.wiley.com/WileyCDA/WileyTitle/productCd... http://www.ece.cmu.edu/~koopman/des_s99/sw_testing... http://www.cs.hut.fi/~jlonnber/VisualTesting.pdf